//
//  SPBaseTableViewCell.h
//  SmartCity
//
//  Created by LSP on 2017/5/16.
//  Copyright © 2017年 NRH. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef struct {
    CGFloat leftSpacing;    //!< 左边到父视图的间距
    CGFloat rightSpacing;   //!< 右边到父视图的间距
    CGFloat verticalSpacing;//!< 垂直方向到父视图的间距
    CGFloat height;         //!< 线条高度
} CellSeparatorLineFrame;

FOUNDATION_EXTERN const CellSeparatorLineFrame cellSeparatorLineFrameDefault; //!< 默认 {0, 0, 0, 0.7}
//NS_INLINE CellSeparatorLineFrame cellSeparatorLineFrameMake(CGFloat, CGFloat, CGFloat, CGFloat);




/**
 *  TableViewCell 基类
 */
@interface SPBaseTableViewCell : UITableViewCell

/**
 cell按下的时候是否显示高亮状态.(默认YES)
 */
@property (nonatomic, assign) IBInspectable BOOL highlightEnabled;

@property (nonatomic, weak, readonly) UIView *lineView; //!< 分割线
/**
 *  在Cell顶部添加分割线。
 */
- (void)addSeparatorLineAtTop;
- (void)addSeparatorLineAtTop:(CellSeparatorLineFrame)frame;

/**
 *  在Cell底部添加分割线。
 */
- (void)addSeparatorLineAtBottom;
- (void)addSeparatorLineAtBottom:(CellSeparatorLineFrame)frame;


/* ***************** 以下为子类重载统一入口 ***************** */
/**
 *  初始化子视图样式。父类在视图加载时自动调用。
 *  （供子类重载）。
 */
- (void)setupSubviews;


/**
 *  cell创建后, 被赋予重用标识符,
 *  若子类需要根据不同的reuseIdentifier设置不同的样式, 可重载本方法.
 *
 *  @param reuseIdentifier 重用标识符
 *  （供子类重载）。
 */
- (void)configForReuseIdentifier:(NSString *)reuseIdentifier;

/**
 *  确保登录状态, 如果未登录则跳转至登录界面, 并在登录成功后继续之前的操作.
 *
 *  @param failureContinue 登录成功后继续之前的操作
 *  @return 返回是已否登录
 */
- (BOOL)ensureHadLoginIfFailed:(void(^)(void))failureContinue;

/**
 是否是Section内最后一个Cell

 (供子类重载，父类不做任何处理)
 */
//- (void)setIsTheLastInSection:(BOOL)yesOrNo;
@property (nonatomic, assign) BOOL isTheLastInSection;
@end

NS_INLINE CellSeparatorLineFrame cellSeparatorLineFrameMake(CGFloat left, CGFloat right, CGFloat vertical, CGFloat height) {
    CellSeparatorLineFrame r;
    r.leftSpacing = left;
    r.rightSpacing = right;
    r.verticalSpacing = vertical;
    r.height = height;
    return r;
}
